def strmult(s: str, n: int) -> str:
    return s * n

x = strmult("abc", 5)
print(x)

print(strmult.__annotations__)


def call(f, **kwargs):
    for arg in kwargs:
        if arg not in f.__annotations__:
            raise TypeError("Parameter '{}' unbekannt".format(arg))
        if not isinstance(kwargs[arg], f.__annotations__[arg]):
            raise TypeError("Parameter '{}' hat ungültigen Typ".format(arg))
    ret = f(**kwargs)
    if type(ret) != f.__annotations__["return"]:
        raise TypeError("Ungültiger Rückgabewert: " + str(type(ret)))
    return ret


x = call(strmult, s="Hallo", n=7)
print(x)

#x = call(strmult, s="Hallo", n="Welt")      # TypeError: Parameter 'n' hat ungültigen Typ

#x = call(strmult, s=13, n=37)               # TypeError: Parameter 's' hat ungültigen Typ

#x = call(strmult, u="Hallo", n=37)          # TypeError: Parameter 'u' unbekannt
